package New;

import java.util.concurrent.locks.ReentrantReadWriteLock;

public class LockDownGradingDemo {
    public static void main(String[] args) {
        ReentrantReadWriteLock readWriteLock = new ReentrantReadWriteLock();
        ReentrantReadWriteLock.ReadLock readLock = readWriteLock.readLock();
        ReentrantReadWriteLock.WriteLock writeLock = readWriteLock.writeLock();
//    有且只有一个线程，来验证锁降级策略要求
//        writeLock.lock();
//        System.out.println("-----111");//写锁获取锁，执行打出---111
        readLock.lock();//写锁降级过后，读锁进去了，打出----read
        System.out.println("-------read");
        writeLock.lock();
        System.out.println("-----写锁正在写入");
        /**因为读锁没有释放，所以程序阻塞，不能打出 ----写锁正在写入
         * 如果有线程在读，那么写线程是无法获取写锁的，是悲观读的策略
         * 有读锁的条件下，其他线程无法加写锁，
         * 就是所有人都能拿到本次写后的数据，确保一致性
         */
        writeLock.unlock();
    }
}
